<?php
	#Criar código sem erros.
	#error_reporting(E_ALL);
	
	/**
	 * Introduzir na PATH o caminho da biblioteca PHPExcel.
	 * OBRIGATÓRIO antes de todos os outros 'includes' que chamam esta biblioteca 
	 */
	set_include_path (get_include_path().PATH_SEPARATOR.DIR_TOOLKIT_FT.'phpExcel/');
	
	#Includes
	include 'PHPExcel/Writer/CSV.php';
	include 'PHPExcel/Writer/HTML.php';
	include 'PHPExcel/Writer/Excel5.php';
	include 'PHPExcel/Writer/Excel2007.php';
	
	#Códigos de retorno
	define("EXCEL_EXPORT_ERRO_METODO", -2);
	define("EXCEL_EXPORT_ERRO_FORMATO", "O formato de exportação do Excel não é suportado<br>");
	
	#Métodos de Save
	define("DOWNLOAD", "download");
	define("SAVE_TO_DISK", "save_to_disk");
	
	#Formatos de Documento
	define("FMT_CSV", "csv");
	define("FMT_HTML", "html");
	define("FMT_EXCEL5", "excel_5");
	define("FMT_EXCEL2007", "excel_2007");

class EXCELExport {
	private $objPHPExcel, $filename;
	
	public function __construct($objPHPExcel, $filename){
		$this->filename = $filename;
		$this->objPHPExcel = $objPHPExcel;
	}
	
	/**
	 * Exporta uma representaçãoo em memória de um ficheiro
	 * Excel para um ficheiro *.xls e permite ao utilizador
	 * guardá-lo no servidor ou fazer o seu download.
	 * 
	 * @return 
	 * @param $objExcel Object
	 * @param $filename Object[optional]
	 * @param $format Object[optional]
	 * @param $method Object[optional]
	 */
	public function save($format = FMT_EXCEL_5, $method = DOWNLOAD) {
		//Criar o objecto Writer consoante o formato desejado.		
		switch ($format) {
			case FMT_CSV:
				$objWriter = new PHPExcel_Writer_CSV($this->objPHPExcel);
				break;
			case FMT_HTML:
				$objWriter = new PHPExcel_Writer_HTML($this->objPHPExcel);
				break;
			case FMT_EXCEL5:
				$objWriter = new PHPExcel_Writer_Excel5($this->objPHPExcel);
				break;
			case FMT_EXCEL2007:
				$objWriter = new PHPExcel_Writer_Excel2007($this->objPHPExcel);
				break;
			default: throw new Exception(EXCEL_EXPORT_ERRO_FORMATO."Formato: ".$format."<br>".__FILE__.", linha ".__LINE__);
		}
		
		//Verificar qual o método escolhido para guardar o ficheiro.
		switch ($method) {
			case DOWNLOAD:
				header("Pragma: public");
				header("Expires: 0");
				header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
				header("Content-Type: application/force-download");
				header("Content-Type: application/octet-stream");
				header("Content-Type: application/download");
				header("Content-Disposition: attachment;filename=$this->filename ");
				header("Content-Transfer-Encoding: binary ");
				$objWriter->save("php://output");
				break;
			case SAVE_TO_DISK:
				$objWriter->save($this->filename);
				break;
			default: throw new Exception(EXCEL_EXPORT_ERRO_METODO.__FILE__.", linha ".__LINE__);
		}
	}
}
?>
